package br.com.skpharma.dao;

import java.util.ArrayList;

import br.com.skpharma.db.DB;
import br.com.skpharma.vo.CidadeVO;
import br.com.skpharma.vo.ClienteVO;
import br.com.skpharma.vo.EnderecoVO;
import br.com.skpharma.vo.PerfilVO;




public class DAOCliente {
	private DB db = new DB("jdbc:postgresql://localhost:5432/skpharma","postgres","postgres");
	private ClienteVO cliente;

	public DAOCliente(){
		cliente = new ClienteVO();
	}
	
	public void setCliente(ClienteVO nClienteVO){
		cliente = nClienteVO;
	}

	public ClienteVO getClienteVO(){
		return(cliente);
	}

	public void salvar(){

		if(db.connect()){			
			db.update("insert into cliente (login,senha,nome,datanasc,cpf,telefone,celular,rua,cep,bairro,numero,cod_cidade,email,cod_perfil) values ('"+ 
				 	cliente.getLogin()+	 
					  "','"+cliente.getSenha() +
					  "','"+cliente.getNome()+
					  "','"+cliente.getDataNasc()+
					  "','"+cliente.getCpf()+
					  "','"+cliente.getTelefone()+
					  "','"+cliente.getCelular()+
					  "','"+cliente.getEnderecoVO().getRua()+
					  "','"+cliente.getEnderecoVO().getCep()+
					  "','"+cliente.getEnderecoVO().getBairro()+
					  "','"+cliente.getEnderecoVO().getNumero()+
					  "','"+cliente.getEnderecoVO().getCidadeVO().getCod() +
					  "','"+cliente.getEmail() +
					  "','"+cliente.getPerfilVO().getCod() +
					  "')");
			db.disconnect();
		}		
	}

	public void excluir(){
		if(db.connect()){
			db.update("delete from cliente where cod_cliente = " + cliente.getCod() );			
			db.disconnect();
		}		
	}
	
	public void editar(){		
		if(db.connect()){
			db.update("update cliente set login='"+ cliente.getLogin() +"'," +
					"senha='"+ cliente.getSenha() +"'," +
					"nome='"+ cliente.getNome() +"'," +
					"datanasc='"+ cliente.getDataNasc() +"'," +
					"cpf='"+ cliente.getCpf() +"'," +
					"telefone='"+ cliente.getTelefone() +"'," +
					"celular='"+ cliente.getCelular() +"'," +
					"rua='"+ cliente.getEnderecoVO().getRua() +"'," +
					"cep='"+ cliente.getEnderecoVO().getCep() +"'," +
					"bairro='"+ cliente.getEnderecoVO().getBairro() +"'," +
					"numero='"+ cliente.getEnderecoVO().getNumero() +"'," +
					"cod_cidade='"+ cliente.getEnderecoVO().getCidadeVO().getCod() +"'," +
					"email='"+ cliente.getEmail() +
					"'where cod_cliente= " + cliente.getCod());			
			db.disconnect();
		}		
	}

	
	
	public ArrayList obterLista(){
		ArrayList lista = new ArrayList();
		ClienteVO clienteVO;
		DAOCidade daoCidade;
		if(db.connect()){
			db.select("select cliente.* ,cidade.ds_cidade as ci_descricao, perfil.ds_perfil as ds_perfil from cliente,cidade,perfil where perfil.cod_perfil = cliente.cod_perfil and cliente.cod_cidade = cidade.cod_cidade order by nome");
			while(db.moveNext()){
				daoCidade = new DAOCidade();
				daoCidade.carregar(db.getInt("cd_cidade"));
				clienteVO = new ClienteVO( db.getInt("cod_cliente"),  db.getString("login"), db.getString("senha"),   db.getString("nome"),    db.getDate("datanasc") ,   db.getString("cpf"),   db.getString("telefone"),   db.getString("celular"),   db.getString("email"), new EnderecoVO( db.getString("rua"), db.getInt("numero"), db.getString("bairro"), db.getString("cep"), new CidadeVO( db.getInt("cod_cidade"),   db.getString("ci_descricao"))), new PerfilVO(db.getInt("cod_perfil"),db.getString("ds_perfil")));
				lista.add(clienteVO);
			}
			db.disconnect();
		}		
		return lista;
	}	
	

	public void obter(int codigo){		
		if(db.connect()){
			db.select("select cliente.*,cidade.ds_cidade as ds_cidade,perfil.ds_perfil as ds_perfil from cliente,cidade,perfil where cliente.cod_cidade = cidade.cod_cidade and perfil.cod_perfil = cliente.cod_perfil and cod_cliente =" + codigo);
			if(db.moveNext()){				
				cliente.setCod(db.getInt("cod_cliente"));
				cliente.setLogin(db.getString("login"));
				cliente.setSenha(db.getString("senha"));
				cliente.setNome(db.getString("nome"));
				cliente.setDataNasc(db.getDate("datanasc"));
				cliente.setTelefone(db.getString("telefone"));
				cliente.setCelular(db.getString("celular"));
				cliente.setEmail(db.getString("email"));
				cliente.setCpf(db.getString("cpf"));
				cliente.getEnderecoVO().setRua(db.getString("rua"));
				cliente.getEnderecoVO().setCep(db.getString("cep"));		
				cliente.getEnderecoVO().setBairro(db.getString("bairro"));
				cliente.getEnderecoVO().setNumero(db.getInt("numero"));

				//cliente.getEnderecoVO().getCidadeVO().setCod(db.getInt("cod_cidade"));
				//cliente.getEnderecoVO().getCidadeVO().setDs(db.getString("ds_cidade"));
				DAOCidade daoCidade = new DAOCidade();
				daoCidade.carregar(db.getInt("cod_cidade"));
				cliente.getEnderecoVO().setCidadeVO(daoCidade.getCidadeVO());
				
				DAOPerfil daoPerfil = new DAOPerfil();
				daoPerfil.carregar(db.getInt("cod_perfil"));
				cliente.setPerfilVO(daoPerfil.getPerfilVO());
				
				

				
			}
			
			db.disconnect();
		}		
	}
	
	public void obterPorLogin(String login, String senha){		
		if(db.connect()){
			db.select("select cliente.*,cidade.ds_cidade as ds_cidade,perfil.ds_perfil as ds_perfil from cliente,cidade,perfil where cliente.cod_cidade = cidade.cod_cidade and perfil.cod_perfil = cliente.cod_perfil and cliente.login ='" + login + "' and cliente.senha = '" + senha + "'");
			if(db.moveNext()){				
				cliente.setCod(db.getInt("cod_cliente"));
				cliente.setLogin(db.getString("login"));
				cliente.setSenha(db.getString("senha"));
				cliente.setNome(db.getString("nome"));
				cliente.setDataNasc(db.getDate("datanasc"));
				cliente.setTelefone(db.getString("telefone"));
				cliente.setCelular(db.getString("celular"));
				cliente.setEmail(db.getString("email"));
				cliente.setCpf(db.getString("cpf"));
				cliente.getEnderecoVO().setRua(db.getString("rua"));
				cliente.getEnderecoVO().setCep(db.getString("cep"));		
				cliente.getEnderecoVO().setBairro(db.getString("bairro"));
				cliente.getEnderecoVO().setNumero(db.getInt("numero"));

				//cliente.getEnderecoVO().getCidadeVO().setCod(db.getInt("cod_cidade"));
				//cliente.getEnderecoVO().getCidadeVO().setDs(db.getString("ds_cidade"));
				DAOCidade daoCidade = new DAOCidade();
				daoCidade.carregar(db.getInt("cod_cidade"));
				cliente.getEnderecoVO().setCidadeVO(daoCidade.getCidadeVO());
				
				DAOPerfil daoPerfil = new DAOPerfil();
				daoPerfil.carregar(db.getInt("cod_perfil"));
				cliente.setPerfilVO(daoPerfil.getPerfilVO());
				
				

				
			}
			
			db.disconnect();
		}		
	}
	
	
}

